package com.xf.thread;

/**
 * 多线程的案例
 */
public class ThreadDemo {
    public static void main(String[] args) {
        Thread cooker = new Cooker();
        Thread eater = new Eater();
        cooker.start();
        eater.start();

    }
}

// 餐桌
class Desk {
    // 桌子是否有汉堡
    public static boolean flag = false;
    // 最大的消费的总数
    public static int maxCount = 10;
    // 桌子的锁
    public static final Object lock = new Object();

}

// 厨子
class Cooker extends Thread {
    @Override
    public void run() {
        // 如果桌子上没有汉堡就要做
        while (true) {
            synchronized (Desk.lock) {
                // 如果最大数量为0了就不需要执行了
                if (Desk.maxCount == 0) {
                    break;
                }
                // 如果桌子没有汉堡就做
                if (!Desk.flag) {
                    System.out.println("开始做汉堡");
                    // 修改桌子上的标识
                    Desk.flag = true;
                    Desk.maxCount--;
                    // 唤醒等待锁的线程
                    Desk.lock.notifyAll();

                } else {
                    // 等待
                    try {
                        Desk.lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

// 吃货
class Eater extends Thread {
    @Override
    public void run() {
        while (true) {
            // 如果桌子上有汉堡就吃
            synchronized (Desk.lock) {
                if (Desk.maxCount == 0) {
                    break;
                }
                if (Desk.flag) {
                    System.out.println("开始吃汉堡");
                    Desk.flag = false;
                    Desk.lock.notifyAll();
                } else {
                    try {
                        Desk.lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }
}